#ifndef _CONSTANTS__
#define _CONSTANTS__

//*************************************************************************************//
/* Global definitions for default values of model parameters 			       */
/* Do not declare global variables here, use only token definitions. 		       */
//*************************************************************************************//
#define gdb_param_MODEL_NAME "QGCM"
#define gdb_param_PI 3.14159265 
#define gdb_param_PQDOMAINOPTION ""
#define gdb_param_PQFINEDOMAINACCURACYTHRESHOLD 0.1
#define gdb_param_PQFINEDOMAINSTARTINGRESOLUTION 10
#define gdb_param_PQFINEDOMAINRESOLUTIONFACTOR 5
#define gdb_param_DEBUGONERROR     0 
#define gdb_param_NUMFIELDS     6 
#define gdb_param_TIMESTEP 0.01
#define gdb_param_IMPLICIT_DIAG_VARS 0
#define gdb_param_INITIAL_NESTING_DEPTH 2
#define gdb_param_MODEL_MESSAGE_OUTPUT_FILE     "model.msg"
#define gdb_param_MODEL_FIFO			"qfifo"
#define gdb_param_MODEL_OUTPUT_FILE_TEMPLATE    "stdout"
#define gdb_param_NONLINEAR   1 
#define gdb_param_STATIC_COEFFS_FILE "static_coeffs.mat"
#define gdb_param_INCLUDE_SEARCH_DIR "./qglibrary"
#define gdb_param_INCLUDE_SEARCH_DIR_ENV_VAR_NAME "MICLIB"
#define gdb_param_IGNORESLOT 0
#define gdb_param_IGNOREREALIZABILITYCONSTRAINTS 0
#define gdb_param_SLOT_WIDTH_SCALE 0.25
#define gdb_param_IGNORETRIANGLEBASE 0 
#define gdb_param_KCUTOFFMULTIPLIER 1.0
#define gdb_param_FOURIER_TRANSFORM_COEFFICIENT 2*3.14159265

#define gdb_param_ATMOSPHERE_LAYER_1_FIELD_NUMBER  1
#define gdb_param_ATMOSPHERE_LAYER_2_FIELD_NUMBER  2
#define gdb_param_OCEAN_LAYER_1_FIELD_NUMBER 3 
#define gdb_param_OCEAN_LAYER_2_FIELD_NUMBER  4
#define gdb_param_MIXED_LAYER_FIELD_NUMBER 5
#define gdb_param_TOPO_LAYER_FIELD_NUMBER 6

#define gdb_enum_LOGSPACING 2
#define gdb_enum_UNIFORMSPACING 1

//*************************************************************************************//
#define gdb_str_MODEL_NAME			"MODEL_NAME"
#define gdb_str_PI				"PI"
#define gdb_str_NUMFIELDS                       "NUMFIELDS"
#define gdb_str_DEBUGONERROR                    "DEBUGONERROR"
#define gdb_str_PQDOMAINOPTION			"PQ_SLOT_DOMAIN_OPTION"
#define gdb_str_PQFINEDOMAINACCURACYTHRESHOLD   "PQ_DOMAIN_ACCURACY_THRESHOLD"
#define gdb_str_PQFINEDOMAINSTARTINGRESOLUTION  "PQFINEDOMAINSTARTINGRESOLUTION"
#define gdb_str_PQFINEDOMAINRESOLUTIONFACTOR    "PQFINEDOMAINRESOLUTIONFACTOR"
#define gdb_str_NUMTHREADS                      "NUMTHREADS"
#define gdb_str_TIMESTEP                        "TIMESTEP"
#define gdb_str_IMPLICIT_DIAG_VARS              "ALLOWIMPLICIT" 
#define gdb_str_INITIAL_NESTING_DEPTH           "STATIC_INITIAL_NESTING_DEPTH"
#define gdb_str_MODEL_MESSAGE_OUTPUT_FILE       "MODEL_MESSAGE_OUTPUT_FILE"
#define gdb_str_MODEL_FIFO			"MODEL_FIFO"
#define gdb_str_MODEL_OUTPUT_FILE_TEMPLATE      "MODEL_OUTPUT_FILE_TEMPLATE"
#define gdb_str_NONLINEAR      			"NONLINEAR"
#define gdb_str_STATIC_COEFFS_FILE              "STATIC_COEFFICIENTS_FILE"
#define gdb_str_IGNORETRIANGLEBASE              "USE_REGULARIZED_DIA"
#define gdb_str_KCUTOFFMULTIPLIER               "REGULARIZED_K_SCALING_FACTOR"
#define gdb_str_FOURIER_TRANSFORM_COEFFICIENT   "FOURIER_TRANSFORM_COEFFICIENT"
#define gdb_str_IGNOREREALIZABILITYCONSTRAINTS  "IGNORE_REALIZABILITY_CONSTRAINTS"

#define gdb_str_ATMOSPHERE_LAYER_1_FIELD_NUMBER "A1"
#define gdb_str_ATMOSPHERE_LAYER_2_FIELD_NUMBER "A2"
#define gdb_str_OCEAN_LAYER_1_FIELD_NUMBER "O1"
#define gdb_str_OCEAN_LAYER_2_FIELD_NUMBER "O2"
#define gdb_str_MIXED_LAYER_FIELD_NUMBER "ML"
#define gdb_str_TOPO_LAYER_FIELD_NUMBER "TOPOLAYER"

#define gdb_str_STDIN				"STDIN"
#define gdb_str_STDOUT				"STDOUT"
#define gdb_str_STDMSG				"STDMSG"

#define gdb_str_L_DUMP                          "L_DUMP"
#define gdb_str_FPHI_DUMP                       "FPHI_DUMP"
#define gdb_str_R_DUMP                          "R_DUMP"
#define gdb_str_S_DUMP                          "S_DUMP"
#define gdb_str_PHI_DUMP                        "PHI_DUMP"
#define gdb_str_G_DUMP                          "G_DUMP"
#define gdb_str_FG_DUMP                         "FG_DUMP"


#define gdb_str_INCLUDE_SEARCH_DIR              "INCLUDEPATH"
#define gdb_str_INCLUDE_SEARCH_DIR_ENV_VAR_NAME "INCLUDEVAR"
#define gdb_str_IGNORESLOT                      "IGNORESLOTDOMAINRESTRICTION"
#define gdb_str_SLOT_WIDTH_SCALE		"SLOT_WIDTH_SCALING_FACTOR"
//*************************************************************************************//
#define gdb_prof_str_K_DOMAIN 			"K_DOMAIN"
#define gdb_prof_str_DK_DOMAIN                  "DK_DOMAIN"
#define gdb_prof_str_K_DOMAIN_CENTERED          "K_DOMAIN_CENTERED"
#define gdb_prof_str_K_DOMAIN_CENTERED_SQUARED  "K_DOMAIN_CENTERED_SQUARED"
#define gdb_prof_str_NK_DOMAIN 			"NK_DOMAIN"
#define gdb_prof_str_FCOEFFS			"FCOEFFS"
#define gdb_prof_str_AASAMPLINGFREQUENCY        "AASAMPLINGFREQUENCY"
#define gdb_prof_str_FINEKDOMAINMULTIPLIERS     "FINEKDOMAINMULTIPLIERS"
#define gdb_prof_str_K_DOMAIN_SPACING           "K_DOMAIN_SPACING"
//*************************************************************************************//
//
// Now define keyword tokens
//
#define gdb_TOKENIZE_SINGLE_TOKEN_LIST ",:;{}[]()<>*=!^-'/+&|%#"
#define gdb_TOKENIZE_MULTI_TOKEN_LIST { "==", "!=", "<=", ">=", "&&", "||", "=>", "=<", "++", "--", "+=", "-=" }
#define gdb_TOKENIZE_MULTI_TOKEN_LIST_SIZE 12 

#define gdb_KEYWORD_PREPROC_IF		"IF"
#define gdb_KEYWORD_PREPROC_ENDIF	"ENDIF"
#define gdb_KEYWORD_PREPROC_ELSE	"ELSE"
#define gdb_KEYWORD_PREPROC_ELSEIF	"ELSEIF"
#define gdb_KEYWORD_PREPROC_ERROR	"ERROR"
#define gdb_KEYWORD_PREPROC_DEFINE	"DEFINE"
#define gdb_KEYWORD_PREPROC_UNDEFINE	"UNDEFINE"
#define gdb_KEYWORD_PREPROC_WARNING	"WARNING"
#define gdb_KEYWORD_PREPROC_MESSAGE	"MESSAGE"
#define gdb_KEYWORD_PREPROC_BREAKPOINT	"BREAKPOINT"
#define gdb_KEYWORD_PREPROC_END		"END"
#define gdb_KEYWORD_PREPROC_INCLUDE     "INCLUDE"
#define gdb_KEYWORD_PREPROC_INCLUDE_PRE "#INCLUDE"
#define gdb_KEYWORD_PREPROC_DEFINE_PRE  "#DEFINE"
#define gdb_KEYWORD_PREPROC_PARAMETER   "PARAMETER"


#endif
